package com.fjw.service.impl;

import com.fjw.mapper.ArticleMapper;
import com.fjw.pojo.Article;
import com.fjw.service.ArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;

/**
 * 文章业务逻辑实现类
 * 实现ArticleService接口，处理文章相关的业务逻辑
 */
@Service
public class ArticleServiceImpl implements ArticleService {

    @Autowired
    private ArticleMapper articleMapper;

    /**
     * 添加文章
     * @param article 文章实体，需包含标题、内容、职业分类、专业分类和作者信息
     */
    @Override
    public void add(Article article) {
        articleMapper.add(article);
    }

    /**
     * 通过ID查询文章
     * @param id 文章ID
     * @return 文章实体，若不存在则返回null
     */
    @Override
    public Article findById(Integer id) {
        return articleMapper.findById(id);
    }

    /**
     * 根据分类条件查询文章
     * @param job_category 职业分类（可为空）
     * @param major_category 专业分类（可为空）
     * @return 符合条件的文章列表
     *         逻辑说明：
     *         - 若两个参数均不为空，按职业和专业分类联合查询
     *         - 若仅专业分类不为空，按专业分类查询
     *         - 若仅职业分类不为空，按职业分类查询
     *         - 若两个参数均为空，查询所有文章
     */
    @Override
    public List<Article> findByCategory(String job_category, String major_category) {
        if (!Objects.equals(job_category, "") && !Objects.equals(major_category, "")) {
            //若两个参数均不为空，按职业和专业分类联合查询
            return articleMapper.findByCategory(job_category, major_category);
        } else if (Objects.equals(job_category, "") && !Objects.equals(major_category, "")) {
            //若仅专业分类不为空，按专业分类查询
            return articleMapper.findByMajorCategory(major_category);
        } else if (!Objects.equals(job_category, "") && Objects.equals(major_category, "")) {
            //若仅职业分类不为空，按职业分类查询
            return articleMapper.findByJobCategory(job_category);
        } else if (Objects.equals(job_category, "") && Objects.equals(major_category, "")) {
            //若两个参数均为空，查询所有文章
            return articleMapper.getAll();
        }
        return null;
    }

    /**
     * 通过作者ID查询文章列表
     * @param author 作者ID（关联User表主键）
     * @return 该作者发布的所有文章
     */
    @Override
    public List<Article> findByAuthor(Integer author) {
        return articleMapper.findByAuthor(author);
    }

    /**
     * 通过ID删除文章
     * @param id 文章ID
     */
    @Override
    public void deleteById(Integer id) {
        articleMapper.deleteById(id);
    }

    /**
     * 通过ID更新文章信息
     * @param article 文章实体，需包含ID及要更新的字段
     */
    @Override
    public void updateById(Article article) {
        articleMapper.updateById(article);
    }

    /**
     * 获取所有文章列表
     * @return 系统中所有已发布的文章
     */
    @Override
    public List<Article> getAll() {
        return articleMapper.getAll();
    }
}
